Approximer un extremum

On considère une fonction définie sur un intervalle \([~a~;~b~]\). Elle est croissante sur \([~a~;~c~]\) puis décroissante sur \([~b~;~c~]\), où \(c\) est un réel de\(​​\) \([~a~;~b~]\).
Elle admet donc un maximum sur \([~a~;~b~]\).

Prenons la fonction \(f\) définie par \(f(x)=-(2-x)^2\) sur \([~0~;~4~]\) et cherchons un encadrement à \(10^{-3}\) du maximum de cette fonction  sur \([~0~;~4~]\).

def f(x):
    return -(2-x)**2 #On peut entrer l'expression de la fonction souhaitée

def balayage(f,a,b,n):
    #a et b correspondent aux bornes de l'intervalle et n correspond au nombre de chiffres "après la virgule" souhaités
    epsilon=10**(-n)
    maxi=f(a)
    while b-a>epsilon:
        amplitude=b-a
        for i in range(21): #On découpe arbitrairement [a ; b] en 20
            x=a+amplitude/20*i #calcul des abscisses obtenues en divisant [a ; b] en 10
            if f(x)>maxi:
                maxi=f(x)
                x_max=x
        a=x_max-amplitude/10 #On réduit l'intervalle dans lequel on va appliquer
        b=x_max+amplitude/10 #à nouveau le balayage jusqu'à la précision demandée
    return [round(a,n),round(b,n)]

Source : https://lesmanuelslibres.region-academique-idf.fr
Télécharger le manuel : https://forge.apps.education.fr/drane-ile-de-france/les-manuels-libres/mathe-matiques-seconde ou directement le fichier ZIP
Sous réserve des droits de propriété intellectuelle de tiers, les contenus de ce site sont proposés dans le cadre du droit Français sous licence CC BY-NC-SA 4.0